package datos;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.UUID;

import datos.ConnectionManager;

import datos.interfaces.IDireccionDAO;
import datos.interfaces.IUsuarioDAO;
import logica.Direccion;
import logica.Usuario;



public class JDBCUsuarioDAO implements IUsuarioDAO {

	@Override
	public boolean insertarUsuario(Usuario usuario) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Usuario login(String email, String password) {
		ConnectionManager conexMan = ConnectionManager.getInstance();
		Connection conexion=conexMan.checkOut();
		
		String sql="SELECT * FROM usuario WHERE email=? AND password=?";
		ResultSet resultado;
		Usuario usr= null;
		try {
			PreparedStatement ps=conexion.prepareStatement(sql);
			ps.setString(1, email);
			ps.setString(2, password);
			resultado=ps.executeQuery();
			if(resultado.next()){
				usr=this.obtenerUsuario(resultado.getString("usuarioID"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		conexMan.checkIn(conexion);
		return usr;
	}
	
	public String obtenerUsuarioOID(String usuarioID, Connection conn){
		String sql="SELECT OID FROM usuario WHERE usuarioID=?";
		ResultSet resultado;
		String oid="";
		try {
			PreparedStatement ps=conn.prepareStatement(sql);
			ps.setString(1,usuarioID);
			resultado=ps.executeQuery();
			resultado.next();
			oid=resultado.getString("OID");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return oid;
	}
	
	@Override
	public Usuario obtenerUsuario(String usuarioID){
		
		//TODO Tratar excepciones
		/* Cargar driver y crear conexion */
		Usuario aux=new Usuario();
		
		ConnectionManager conexMan = ConnectionManager.getInstance();
		Connection conexion=conexMan.checkOut();
		
		try{
		/* Realizar consulta*/
		String sql="SELECT * FROM usuario WHERE usuarioID=? OR OID=?";
		PreparedStatement ps=conexion.prepareStatement(sql);
		ps.setString(1,usuarioID);
		ps.setString(2, usuarioID);
		ResultSet resultados;
		
		
		resultados=ps.executeQuery();
		/* Obtener resultados */
		resultados.next();
		aux.setNombre(resultados.getString("nombre"));
		aux.setApellidos(resultados.getString("apellidos"));
		aux.setDni(resultados.getString("dni"));
		aux.setEmail(resultados.getString("email"));
		aux.setFecha(resultados.getString("fecha"));
		aux.setTelefono(resultados.getString("telefono"));
		aux.setUnidadesIntercambio(resultados.getInt("unidades_intercambio"));
		aux.setUsuarioID(resultados.getString("usuarioID"));
		aux.setValidado(resultados.getBoolean("validado"));
		IDireccionDAO dirDAO=new JDBCDireccionDAO();
		Direccion dir=dirDAO.obtenerDireccion(resultados.getString("direccionOID"), conexion);
		aux.setDireccion(dir);
		
		/* Liberar recursos */
		resultados.close();
		ps.close();
		}catch(SQLException e){
			e.printStackTrace();
		}
		
		conexMan.checkIn(conexion);
		return aux;
	}

	@Override
	public boolean verificarUsuario(Usuario usuario) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void modificarUnidadesUsuario(Integer unidadesIntercambio, String usuarioID) {
		ConnectionManager conexMan = ConnectionManager.getInstance();
		Connection conexion=conexMan.checkOut();
		
		String sql="UPDATE usuario SET unidades_intercambio=? WHERE usuarioID=?";
		
		try {
			
			PreparedStatement ps=conexion.prepareStatement(sql);
						
			ps.setInt(1, unidadesIntercambio);
			ps.setString(2, usuarioID);
				
			ps.execute();
			ps.close();
			conexMan.checkIn(conexion);

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
	}

}
